/*
Copyright 2011 Mary Suárez Machado

Este programa es de software libre: usted puede redistribuirlo y/o modificarlo según los términos de la Licencia de Gran pública de GNU como publicado por la Fundación de Software Libre, versión 3 de la Licencia, (o en su opción) cualquier versión posterior.

 Este programa es distribuido en la esperanza que será útil, pero SIN CUALQUIER GARANTÍA; sin aún la garantía implícita de VALOR COMERCIAL O SALUD PARA UN OBJETIVO PARTICULAR. Mirar la Licencia de Gran pública de GNU para más detalles.
*/


#ifndef _VECTOR_H_
#define _VECTOR_H_

#include <crc.h>
 /**
 *@file Vector.h
 *@brief Interfaz para trabajar con vectores de caracteres 
 *
 */

 /**
 * \class Vector
 *
 * \brief Modulo que representa una vector de caracteres
 *         
 * \author Mary Carmen Suárez 
 *
 */
	class Vector
	{
		private:
			unsigned char * cadena;
			int nelem, reservados;
			CRC crc;
			/**
			@brief Operador de asignación
			@param orig, x=orig
			@return devuelve x con los valores de orig
			*/
			Vector & operator= (const Vector & orig);
			/**
			@brief Redimensiona el vector
			@param n, tamaño que queremos que redimensione
			*/
			void Resize (int tam);
		public:
			/**
			@brief Constructor por defecto
			@pos inicializa todo a cero
			*/
			Vector();
			/**
			@brief Constructor de copia
			@param orig, tipo de dato que va a ser copiado
			*/
			Vector(const Vector & orig);
			/**
			@brief Destructor
			@pos libera toda la memoria reservada
			*/
			~Vector();
			/**
			*@return Devuelve el número de elementos usados
			*/
			int GetNelem () const;
			/**
			*@param pos, posicion del caracter que quieres consultar
			*@return Devuelve el caracter de la posición pos
			*/
			unsigned char GetCaracter (int pos) const;
			/**
			@brief Lee desde la entrada estandar un texto hasta el '\0' (incluido)
			*/
			void Leer (std::istream & is);
			/**
			@brief Escribe en el flujo os un texto 
			*/
			void Escribir (std::ostream & os);
			/**
			@brief Añade caracteres al vector
			*/
			void AddCaracter (char c);
			/**
			*@brief Calculo del crc32
			*@return Devulve el crc32 del vector
			*/
			unsigned int GetParidad () const;

};

#endif
